#pragma once

template <class T>
class Singleton
{
public:
	static inline T & getInstance()
	{
		return _instance;
	}

	static inline T* getInstancePtr()
	{
		return &_instance;
	}
protected:
	Singleton(void){}
	~Singleton(void){}
	Singleton(const Singleton<T> &);
	Singleton<T> &operator=(const Singleton<T> &);

	static T _instance;
};

template <class T>
T Singleton<T>::_instance;
